Row Versioning এবং Timestamp ব্যবহার

Microsoft Technologies - এন্টিটি ফ্রেমওয়র্ক (Entity Framework) Concurrency Handling এবং Transactions |
182
182

Row Versioning এবং Timestamp হল Entity Framework (EF) এবং অন্যান্য ডেটাবেস সিস্টেমে ডেটার কনকারেন্ট অ্যাক্সেস এবং Concurrency Control নিশ্চিত করার জন্য ব্যবহৃত দুটি গুরুত্বপূর্ণ প্রযুক্তি। এই প্রযুক্তিগুলি একে অপরকে পরিপূরক করে এবং ডেটাবেসে একই ডেটা একাধিক ব্যবহারকারী বা প্রক্রিয়া দ্বারা আপডেট করার সময়ে কনফ্লিক্ট এবং ডেটা ক্ষতি থেকে রক্ষা করতে সাহায্য করে।


Row Versioning কী?

Row Versioning একটি ডেটাবেস কৌশল, যা ডেটা পরিবর্তনের সময় ডেটা আপডেট এবং কনকারেন্ট অ্যাক্সেস পরিচালনা করতে ব্যবহৃত হয়। Row Versioning এর মাধ্যমে, যখন একটি রেকর্ডে কোনো পরিবর্তন হয়, তখন সেই রেকর্ডের জন্য একটি unique version number (বা timestamp) তৈরি হয়। এটি ডেটাবেসের মধ্যে ডেটার প্রতিটি রোকে একটি অনন্য সংস্করণ ইন্ডিকেটর প্রদান করে, যা নিশ্চিত করে যে ডেটা পরিবর্তনের সময় কোনো কনফ্লিক্ট হয়নি।

EF তে, Row Versioning সাধারণত timestamp বা rowversion ডেটাটাইপ ব্যবহার করে।

Row Versioning উদাহরণ

ধরা যাক, আমাদের একটি Product টেবিল রয়েছে, যেখানে আমরা একটি RowVersion কলাম ব্যবহার করতে চাই যা ডেটা আপডেটের সময় ভার্সন ট্র্যাক করবে।

public class Product
{
    public int ProductId { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }

    // RowVersion/ Timestamp column for concurrency control
    [Timestamp]
    public byte[] RowVersion { get; set; }
}

এখানে:

  • [Timestamp] অ্যাট্রিবিউটটি EF কে জানায় যে এই প্রপার্টি RowVersion ফিল্ড হিসেবে ব্যবহৃত হবে এবং এটি কনকারেন্ট আপডেট ট্র্যাক করবে।
  • byte[] টাইপের RowVersion কলামটি ডেটাবেসে একটি timestamp বা rowversion ডেটাটাইপ হিসেবে মান্য হবে, যা একটি বাইনারি টাইপ।

Timestamp কী?

Timestamp ডেটাবেসের একটি বিশেষ ধরনের কলাম যা একে অপরের মধ্যে ভিন্ন ভিন্ন ডেটা ভার্সন ট্র্যাক করতে ব্যবহৃত হয়। এটি মূলত একটি auto-generated ফিল্ড, যা প্রতিটি রেকর্ডে একটি ইউনিক বাইনারি মান (যেমন: byte[] বা Guid) ধারণ করে, যা যখন ডেটা আপডেট হয়, তখন পরিবর্তিত হয়।

EF তে Timestamp এবং RowVersion সাধারণত একে অপরের প্রতিস্থাপক হিসেবে ব্যবহৃত হয়, যদিও তাদের টেকনিকালি কিছু পার্থক্য থাকতে পারে (যেমন Timestamp মূলত একটি SQL সার্ভার ডেটাটাইপ, তবে RowVersionও একই উদ্দেশ্যে ব্যবহৃত হতে পারে)।

Row Versioning এবং Timestamp এর ব্যবহার

আপনি EF তে একটি RowVersion কলাম ব্যবহার করলে, এটি ডেটাবেসের প্রতিটি রেকর্ডের জন্য একটি version number তৈরি করে, যা ডেটার আপডেটের সময় পরীক্ষা করা হয়। যখন আপনি রেকর্ড আপডেট করার চেষ্টা করেন, তখন EF পরীক্ষা করে যে আপনি যে ভার্সনটি আপডেট করতে চাইছেন, সেটি এখনও ডেটাবেসে বর্তমান আছে কিনা। যদি অন্য কোনো ব্যবহারকারী বা প্রক্রিয়া ইতিমধ্যে সেই রেকর্ড আপডেট করে থাকে, তাহলে EF আপনাকে একটি ConcurrencyException ছুড়ে দিবে, এবং আপনি একটি কনফ্লিক্ট সম্পর্কে অবহিত হবেন।


Row Versioning এবং Timestamp ব্যবহার করার পদ্ধতি

Entity Framework তে RowVersion কিভাবে ব্যবহার করবেন

  1. Model Class এ RowVersion অ্যাট্রিবিউট যোগ করা: প্রথমে, আপনার Entity ক্লাসে RowVersion বা Timestamp প্রপার্টি যোগ করুন, যাতে EF ডেটাবেসে এই প্রপার্টিকে একটি কনকারেন্ট কন্ট্রোল কলাম হিসেবে ব্যবহার করে।
public class Product
{
    public int ProductId { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }

    // RowVersion attribute for concurrency control
    [Timestamp]
    public byte[] RowVersion { get; set; }
}
  1. ডেটাবেসে RowVersion কলাম তৈরি করা: EF মাইগ্রেশন ব্যবহার করে আপনি ডেটাবেসে RowVersion কলামটি তৈরি করতে পারবেন।
Add-Migration AddRowVersionToProduct
Update-Database

এটি ডেটাবেসে RowVersion কলাম তৈরি করবে যা timestamp ডেটাটাইপ হিসেবে হবে।

  1. CRUD অপারেশনে RowVersion ব্যবহার: যখন আপনি Update বা Delete অপারেশন করবেন, EF ডেটাবেসে যে ভার্সনটি আপডেট বা ডিলিট করতে যাচ্ছে, সেটি যাচাই করবে। যদি সংস্করণ মেলে না, তাহলে কনকারেন্টি কনফ্লিক্ট হবে।
using (var context = new YourDbContext())
{
    var product = context.Products.FirstOrDefault(p => p.ProductId == 1);

    if (product != null)
    {
        // Update the product's price
        product.Price = 20.99M;

        try
        {
            context.SaveChanges();  // Will check for concurrency conflict
        }
        catch (DbUpdateConcurrencyException ex)
        {
            // Handle concurrency conflict
            Console.WriteLine("Concurrency conflict occurred.");
        }
    }
}

এখানে, SaveChanges() কল করার সময় EF চেক করবে যে RowVersion কলামের মান আগের মত আছে কিনা, যদি না থাকে, তাহলে DbUpdateConcurrencyException ছুড়ে দেবে।


Row Versioning এবং Timestamp এর সুবিধা

  1. Concurrency Control: RowVersion এবং Timestamp ব্যবহার করে একাধিক ব্যবহারকারী বা অ্যাপ্লিকেশন একই রেকর্ড আপডেট করার সময় কনফ্লিক্ট থেকে রক্ষা পাওয়া যায়। এটি Optimistic Concurrency Control এর একটি অংশ।
  2. ডেটার সুরক্ষা: যখন একাধিক ব্যবহারকারী একই ডেটাকে একাধিক জায়গায় পরিবর্তন করতে চায়, তখন RowVersion বা Timestamp ডেটা ক্ষতি বা অ্যাপ্লিকেশন ক্র্যাশ হওয়া থেকে রক্ষা করে।
  3. ডেটাবেসের কার্যকারিতা বৃদ্ধি: EF এর মাধ্যমে RowVersion কলামের ব্যবহারে ডেটাবেসে অধিক কার্যকারিতা পাওয়া যায়, কারণ কোনো ডেটা আপডেট করার সময় সঠিক সংস্করণটি যাচাই করা হয়।
  4. এলিটমেটিক কনফ্লিক্ট ডিটেকশন: একাধিক ব্যবহারকারী যখন একই ডেটা পরিবর্তন করার চেষ্টা করেন, তখন কনফ্লিক্ট স্বয়ংক্রিয়ভাবে ডিটেক্ট হয়ে যায় এবং ব্যবহারকারীকে অবহিত করা হয়।

Row Versioning এবং Timestamp এর পারফরম্যান্স

RowVersion বা Timestamp ব্যবহারের মাধ্যমে আপনি ডেটাবেসের ভার্সন ট্র্যাক করতে পারেন, যা অনেক সময় পারফরম্যান্সে সাহায্য করে। তবে, যদি একটি অ্যাপ্লিকেশন বা সিস্টেমে উচ্চমাত্রার কনকারেন্ট অ্যাক্সেস ঘটে, তবে ভার্সনিংয়ের ফলে কিছু পারফরম্যান্স ইস্যু হতে পারে (যেমন: অতিরিক্ত ডেটাবেস চেক), তবে এটি তুলনামূলকভাবে নিরাপত্তা এবং ডেটা অখণ্ডতার জন্য গুরুত্বপূর্ণ।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion